package com.gt.wxpay.cashier.merchantNew.interfaces;

import cn.hutool.core.util.IdUtil;
import com.gt.wxpay.cashier.domain.Result;
import com.gt.wxpay.cashier.merchantNew.application.MerchantService;
import com.gt.wxpay.cashier.merchantNew.domain.model.Merchant;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

/**
 * 商户接口
 */
@Controller
@RequestMapping("cashier/merchant")
public class MerchantController {
    @Autowired
    private MerchantService merchantService;

    // 商户号前缀
    private final String MERCHANT_NO_PREFIX = "M";

    // 序列号
    private final String MERCHANT_NO_SEQ = "cashier_merchant_param_seq";


    /**
     * 台账批量导入导出模板文件URL（类路径下的地址）
     *
     * @return
     */
    public String batchTemplateUrl() {
        //TODO:需要批量导入导出时重新实现下面的代码
        throw new RuntimeException("模板未配置，请联系系统管理员配置模板");
    }

    /**
     * 台账批量导出文件名
     *
     * @return
     */
    public String batchExportFileName() {
        //TODO:需要批量导入导出时重新实现下面的代码
        throw new RuntimeException("下载文件名未配置，请联系系统管理员配置下载文件名");
    }

    public Result save(Merchant merchant) {
        Long mid = merchant.getMid();
        if (mid == null) {
            // 校验当前的商户号是否已经存在
            Merchant thisMidMerchant = merchantService.getThatMerchantNo(merchant.getMerchantNo());
            // 如果已经存在被别人占用
            if (thisMidMerchant != null) {
                // 重新生成商户号
                String nextValue = IdUtil.getSnowflakeNextIdStr();
                if (nextValue != null) {
                    merchant.setMerchantNo(MERCHANT_NO_PREFIX + nextValue);
                } else {
                    merchant.setMerchantNo(MERCHANT_NO_PREFIX + "D" + merchantService.getMaxMid());
                }
            }
        }
        merchantService.save(merchant);
        return Result.ok();
    }

    /**
     * 需要建立序列号：cashier_merchant_param_seq
     *
     * @param merchant 实体
     * @param mav      ModelAndView
     * @param request  HttpServletRequest
     */
    protected void extendDetail(Merchant merchant, ModelAndView mav, HttpServletRequest request) {
        // 获取商户号
        String merchantNo = merchant.getMerchantNo();
        if (StringUtils.isBlank(merchantNo)) {
            // 序列服务
            String nextValue = IdUtil.getSnowflakeNextIdStr();
            if (nextValue != null) {
                merchant.setMerchantNo(MERCHANT_NO_PREFIX + nextValue);
            } else {
                merchant.setMerchantNo(MERCHANT_NO_PREFIX + "D" + merchantService.getMaxMid());
            }
        }

    }

}
